// 如何操作mongodb数据库（两种方式，第一种是原生的在控制台操作，第二种是在node中引入mongoose包来通过代码操作）
// 想要操作mongodb数据库就必须首先在桌面打开控制台输入mongod开启服务（不能关闭）

// 一.原生的操作方式
// 再在桌面开启另一个控制台输入mongo开启mongodb数据库,
// 基本命令（在第二个控制台输入命令，最原生的使用命令操作数据库）
// 1.查看所有数据库 show dbs
// 2.切换到指定数据库 use 数据库名(如果没有则会自动创建，但是只有里面有数据时,show dbs才会展示出这个数据库)
// 3.查看当前正在操作的数据库 db
// 4.对当前正在操作的数据库中的表（集合）插入数据 db.需要插入数据的表名.insertOne({"属性名":"值"})括号内的对象表示插入这个表的数据，如果没有这个表（集合）那么会自动创建
// 这里对mongodb数据中的表为什么叫集合解释：在关系型数据库中的表都有约束条件,而对于mongodb非关系型数据库中“表”则是集合，
// 为什么呢？因为在mongodb中集合是没有表结构的也就是没有约束条件，只有json对象类型也就是键值对的数据格式，所以操作起来很简单
// 5.显示当前正在操作的数据库中所有的表（集合）show collections
// 6.查询当前正在操作的数据库中某个表（集合）中所有数据 db.需要查看的表（集合）名.find()



// 二.在node中通过代码来操作
//在当前项目中需要通过npm i mongoose 安装mongoose包，mongoose可以让你设计编写的过程变得非常简单
// 1.引入mongoose包，mongoose包使得操作mongodb数据库更加简单
const mongoose = require('mongoose');

//引入schema来设计表（集合）的结构，例如约束条件等
// var Schema = mongoose.Schema
const { Schema } = mongoose;

// 2.链接mongodb中的test数据库,当然你也可以连接还未创建的数据库，因为当这个数据库插入第一条数据后，这个数据库就会自动创建
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

// 3.设计表的约束条件
const StudentSchema = new Schema({
  name: { type: String, default: '' },//有默认值的属性再插入时不添加会自动以默认值插入
  age: { type: Number },
  comments: [{ say: { type: String }, date: { type: Date, default: Date.now } }],//对插入这个数组的每一项对象数据的约束条件
  date: { type: Date, default: Date.now },

});

// 4.创建mongoose数据库对象模型，这一步就是在test数据库中创建一个叫student的表（集合），并添加了我们之前设计好了的约束条件，自此这个表就得按照约束条件来插入数据,
// 这里返回一个模型构造函数，我们定义一个变量Student来接受，自此就可以通过这个构造函数对象对student表进行增删改查等操作
const Student = mongoose.model('student', StudentSchema);

// 5.添加数据
// 在student表（集合）中插入添加符合这个表约束条件的对象数据，const定义的这个变量名在这里没有实在的意义，在持续化保存就有意义了
// const stu1 = new Student({
//   name: 'xq',
//   age: 18,
//   comments: [{ say: '我是🐖' }, { say: '我是☀' }],
// })
// 最后持久化存储stu1实例对象就完成了添加并保存数据
// stu1.save().then(() => console.log('stu1数据保存成功'));

// 6.查询数据
// 这里由于Student变量是用来操作student表的，所以这里可以调用find方法来查询student表中name属性的值为xq的数据
Student.find({
  name: 'xq'
}, function (err, res) {
  if (err) {
    console.log(err)
  }
  else {
    console.log(res)
  }
})
